<?php

    /**
     * Abstract
     *
     * @package      Core
     * @subpackage   Soap_Adapter
     *
     * @license      GNU Lesser General Public Licence see LICENCE-LGPL file or http://www.gnu.org/licenses/lgpl.html
     */
    abstract class Core_Soap_Adapter_Abstract
    {

    ////////////////////////////////////////////////////////////////////////////
    //                                Variables                               //
    ////////////////////////////////////////////////////////////////////////////

        /**
         * URL of the SOAP Sever
         *
         * @var string
         */
        protected $_url = null;

    ////////////////////////////////////////////////////////////////////////////
    //                            Getters / Setters                           //
    ////////////////////////////////////////////////////////////////////////////

        /**
         * Sets the URL to the WSDL
         *
         * @param       string      $url
         * @throws      Core_ArgumentException
         * @throws      Core_ArgumentNullException
         * @return      Core_Soap_Adapter_Abstract
         */
        public function setWsdl($url)
        {
            if ($url === null) {
                throw new Core_ArgumentNullException('Url must be implemented in subclasses');
            }

            if (strlen(trim($url)) == 0) {
                throw new Core_ArgumentException('Url must be implemented in subclasses');
            }

            $this->_url = $url;
            return $this;
        }

    ////////////////////////////////////////////////////////////////////////////
    //                                 Methods                                //
    ////////////////////////////////////////////////////////////////////////////

        /**
         * Constructor
         */
        public function __construct()
        {
        }

        /**
         * Destructor
         */
        public function __destruct()
        {
            unset($this);
        }

        /**
         * Calls the SOAP server with the requested parameters
         *
         * @param       string      $method
         * @param       array       $params
         * @return      array
         */
        abstract public function call($method, array $params = array());
    }
